package com.baofu.paycore.dal.mapper;

import com.baofu.paycore.dal.model.SubRefundDO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 退款内部资金单Mapper
 * <p>
 *  1.新增退款内部资金单
 *  2.查询需要进行推进处理的订单列表
 * </p>
 * User: xin deng  Date: 16/4/20 ProjectName: paycore Version: 1.0
 */
public interface SubRefundMapper {

    /**
     * 新增退款内部资金单
     *
     * @param subRefundDO  退款内部资金单对象
     * @return               新增数
     */
    int insert(SubRefundDO subRefundDO);


    /**
     * 查询需要进行推进处理的订单列表
     *
     * @param status        状态
     * @param beginTime     订单入库开始时间
     * @param endTime       订单入库结束时间
     * @return              退款资金单列表
     */
    List<SubRefundDO> selectForAdvance(@Param("status")     String status,
                                        @Param("beginTime") Date beginTime,
                                        @Param("endTime")   Date endTime);

    /**
     * 查询需要进行推进处理的订单列表数
     *
     * @param status        状态
     * @param beginTime     订单入库开始时间
     * @param endTime       订单入库结束时间
     * @return              总数
     */
    int selectCountForAdvance(@Param("status")    String status,
                              @Param("beginTime") Date beginTime,
                              @Param("endTime")   Date endTime);

    /**
     * 更新
     *
     * @param status 状态
     * @param errorCode 错误码
     * @param errorReason 错误原因
     * @param updatedBy 更新人
     * @param fundProcNo 资金单号
     * @return 更新条数
     */
    int updateBy(@Param("status")       String status,
                 @Param("errorCode")    String errorCode,
                 @Param("errorReason")  String errorReason,
                 @Param("updatedBy")    String updatedBy,
                 @Param("fundDetailNo") String fundDetailNo,
                 @Param("refundNo")     String fundProcNo);

    /**
     * 依Id查询退款资金单
     *
     * @param id  ID
     * @return    退款资金单信息
     */
    SubRefundDO selectById(Long id);

    /**
     * 更新
     *
     * @param subRefundDO    退款资金单信息
     * @return                更新条数
     */
    int update(SubRefundDO subRefundDO);

    /**
     * 依资金单号查询退款资金单
     *
     * @param fundDetailNo    资金单号
     * @return                退款资金单信息
     */
    SubRefundDO selectByFundDetailNo(@Param("fundDetailNo") String fundDetailNo);

    /**
     * 依资主单单号查询退款资金单
     *
     * @param payNo     主单单号
     * @param status    订单状态
     * @return          退款资金单信息集合
     */
    List<SubRefundDO> selectByPayNo(@Param("payNo")  String payNo,
                                    @Param("status") String status);

}
